
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using AEL.ACT;
using AEL.BOD;
using BEL;

namespace DEL.BOD
{
    /// <summary>
    /// Acceso a la base de datos
    /// Modulo:Bodega tar
    /// Tabla:Bod_Transferencia_Despacho_Det
    /// </summary>
    public class DO_Bod_Transferencia_Despacho_Det
    {
        #region Adapter
        private static CEL.BOD.DO_Bod_Transferencia_Despacho _adpBod_Transferencia_Despacho;
        private static CEL.BOD.DO_Bod_Transferencia_Despacho adpBod_Transferencia_Despacho
        {
            get
            {
                if (_adpBod_Transferencia_Despacho == null)
                    _adpBod_Transferencia_Despacho = new CEL.BOD.DO_Bod_Transferencia_Despacho();
                return _adpBod_Transferencia_Despacho;
            }
        }

        private static CEL.BOD.DO_Bod_Transferencia_Despacho_Det _adpBod_Transferencia_Despacho_Det;
        private static CEL.BOD.DO_Bod_Transferencia_Despacho_Det adpBod_Transferencia_Despacho_Det
        {
            get
            {
                if (_adpBod_Transferencia_Despacho_Det == null)
                    _adpBod_Transferencia_Despacho_Det = new CEL.BOD.DO_Bod_Transferencia_Despacho_Det();
                return _adpBod_Transferencia_Despacho_Det;
            }

        }

        private static CEL.BOD.DO_Bod_Transferencia_Det _adpBod_Transferencia_Det;
        private static CEL.BOD.DO_Bod_Transferencia_Det adpBod_Transferencia_Det
        {
            get
            {
                if (_adpBod_Transferencia_Det == null)
                    _adpBod_Transferencia_Det = new CEL.BOD.DO_Bod_Transferencia_Det();
                return _adpBod_Transferencia_Det;
            }

        }
        #endregion

        #region Operaciones con datos


        public static string Insert(Scope s, Bod_Transferencia_Despacho_Det oBod_Transferencia_Despacho_Det)
        {
            // Inserto los objetos
            string resultado;
            System.Exception eCaso;
            System.Exception otroEX;
            try
            {
                adpBod_Transferencia_Despacho_Det.Adapter.BeginTransaction();
                adpBod_Transferencia_Despacho.Adapter.Transaction = adpBod_Transferencia_Despacho_Det.Adapter.Transaction;
                adpBod_Transferencia_Det.Adapter.Transaction = adpBod_Transferencia_Despacho_Det.Adapter.Transaction;

                //sacar la cantidad que se transfirio
                List<Bod_Transferencia_Det> list_Bod_Transferencia_Det =
                    adpBod_Transferencia_Det.GetByTransferencia(s, oBod_Transferencia_Despacho_Det.Bod_Transferencia_Id);

                decimal cantidad_a_transferir = list_Bod_Transferencia_Det[0].Cantidad;
                //sacar una lista de las transferencias que faltan por despachar
                List<Bod_Transferencia_Despacho_Det> list_Bod_Transferencia_Despacho_Det =
                    adpBod_Transferencia_Despacho_Det.GetByDespacho(s, oBod_Transferencia_Despacho_Det.Bod_Transferencia_Despacho_Id);

                //insertar las transferencia que faltan en el detalle del despacho
                decimal sum = 0;
                foreach (Bod_Transferencia_Despacho_Det vBod_Transferencia_Despacho_Det in list_Bod_Transferencia_Despacho_Det)
                {
                    sum = sum + vBod_Transferencia_Despacho_Det.Cantidad;
                }
                if (sum <= cantidad_a_transferir)
                {
                    resultado = adpBod_Transferencia_Despacho_Det.Insert(s, oBod_Transferencia_Despacho_Det);
                }
                else
                {
                    eCaso = new System.Exception("");
                    otroEX = new System.Exception("Cantidad Excede a la de la Transferencia", eCaso);
                    throw (otroEX);
                }
                adpBod_Transferencia_Despacho.Adapter.CommitTransaction();
            }
            catch (Exception e)
            {
                adpBod_Transferencia_Despacho.Adapter.RollbackTransaction();
                throw (e);
            }
            return resultado;
        }

        public static int Update(Scope s, Bod_Transferencia_Despacho_Det o, Bod_Transferencia_Despacho_Det original_Bod_Transferencia_Despacho_Det)
        {
            // Inserto los objetos
            int resultado;
            System.Exception eCaso;
            System.Exception otroEX;
            try
            {
                adpBod_Transferencia_Despacho_Det.Adapter.BeginTransaction();
                adpBod_Transferencia_Despacho.Adapter.Transaction = adpBod_Transferencia_Despacho_Det.Adapter.Transaction;
                adpBod_Transferencia_Det.Adapter.Transaction = adpBod_Transferencia_Despacho_Det.Adapter.Transaction;

                //sacar la cantidad que se transfirio
                List<Bod_Transferencia_Det> list_Bod_Transferencia_Det =
                    adpBod_Transferencia_Det.GetByTransferencia(s, original_Bod_Transferencia_Despacho_Det.Bod_Transferencia_Id);

                decimal cantidad_a_transferir = list_Bod_Transferencia_Det[0].Cantidad;
                //sacar una lista de las transferencias que faltan por despachar
                List<Bod_Transferencia_Despacho_Det> list_Bod_Transferencia_Despacho_Det =
                    adpBod_Transferencia_Despacho_Det.GetByDespacho(s, original_Bod_Transferencia_Despacho_Det.Bod_Transferencia_Despacho_Id);

                //insertar las transferencia que faltan en el detalle del despacho
                decimal sum = 0;
                foreach (Bod_Transferencia_Despacho_Det vBod_Transferencia_Despacho_Det in list_Bod_Transferencia_Despacho_Det)
                {
                    sum = sum + vBod_Transferencia_Despacho_Det.Cantidad;
                }
                if (sum <= cantidad_a_transferir)
                {
                    resultado = adpBod_Transferencia_Despacho_Det.Update(s, o, original_Bod_Transferencia_Despacho_Det);
                }
                else
                {
                    eCaso = new System.Exception("");
                    otroEX = new System.Exception("Cantidad Excede a la de la Transferencia", eCaso);
                    throw (otroEX);
                }
                adpBod_Transferencia_Despacho.Adapter.CommitTransaction();
            }
            catch (Exception e)
            {
                adpBod_Transferencia_Despacho.Adapter.RollbackTransaction();
                throw (e);
            }
            return resultado;
        }
        #endregion
    }
}
